home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ident / tools / pident.c < prev    next >
C/C++ Source or Header  |  1993-08-09  |  3KB  |  130 lines

  1. /*
  2. ** pident.c                 Another small test program. 
  3. **
  4. ** Compile this program and then link with 
  5. */
  6.  
  7. #define USAGE "usage: %s localhost localport remotehost remoteport protocol\n"
  8. #include <stdio.h>
  9. #include <errno.h>
  10. #include <ctype.h>
  11. #include <pwd.h>
  12.  
  13. #include <sys/types.h>
  14. #include <netinet/in.h>
  15.  
  16. #ifndef HPUX7
  17. #  include <arpa/inet.h>
  18. #endif
  19.  
  20. #ifdef HAVE_KVM
  21. #  include <kvm.h>
  22. #else
  23. #  include "kvm.h"
  24. #endif
  25.  
  26. #include <sys/types.h>
  27. #include <sys/stat.h>
  28.  
  29. #if defined(MIPS) || defined(BSD43)
  30. extern int errno;
  31. #endif
  32.  
  33. #include "identd.h"
  34. #include "error.h"
  35.  
  36. #include <stdio.h>
  37. #include <sys/time.h>
  38. #include <sys/types.h>
  39. #include <sys/socket.h>
  40. #include <netinet/in.h>
  41. #include <arpa/inet.h>
  42. #include <ctype.h>
  43. #include <netdb.h>
  44. #include <pwd.h>
  45.  
  46. int debug_flag   = 0;
  47. int syslog_flag   = 1;
  48. char *path_kmem = NULL;
  49. char *path_unix = NULL;
  50. int lport, fport;
  51.  
  52. syslog(priority, message)
  53. int priority;
  54. char * message;
  55. {
  56.   printf("%s\n", message);
  57. }
  58.  
  59. main(argc,argv)
  60.   int argc;
  61.   char *argv[];
  62. {
  63.   int fd;
  64.   struct sockaddr_in laddr, faddr;
  65.   struct in_addr *lsin_addr, *fsin_addr;
  66.   int addrlen;
  67.   int uid;
  68.   struct servent *Servent;
  69.   struct hostent *Hostent;
  70.   struct passwd *pwp;
  71.   
  72.   if (argc != 6)
  73.   {
  74.     printf(USAGE, argv[0]);
  75.     exit(2);
  76.   }
  77.  
  78.   /*
  79.   ** Open the kernel memory device and read the nlist table
  80.   */
  81.   if (k_open() < 0)
  82.       printf("unable to examine memory\n");
  83.   
  84.   laddr.sin_family = AF_INET;
  85.   if ((laddr.sin_addr.s_addr = inet_addr(argv[1])) == -1) {
  86.     if ((Hostent = gethostbyname(argv[1])) == (struct hostent *)0) {
  87.       perror("gethostbyname");
  88.       exit(2);
  89.     }
  90.     laddr.sin_addr.s_addr =
  91.     inet_addr(inet_ntoa(*(struct in_addr *)(Hostent->h_addr_list[0])));
  92.   }
  93.   lport = atoi(argv[2]);
  94.   if ( lport == 0) {
  95.     if ((Servent = getservbyname(argv[2], argv[5])) == (struct servent *)0) {
  96.       perror("getserverbyname");
  97.       exit(2);
  98.     }
  99.     lport = ntohs(Servent->s_port);
  100.   }
  101.  
  102.   faddr.sin_family = AF_INET;
  103.   if ((faddr.sin_addr.s_addr = inet_addr(argv[3])) == -1) {
  104.     if ((Hostent = gethostbyname(argv[3])) == (struct hostent *)0) {
  105.       perror("gethostbyname");
  106.       exit(2);
  107.     }
  108.     faddr.sin_addr.s_addr =
  109.     inet_addr(inet_ntoa(*(struct in_addr *)(Hostent->h_addr_list[0])));
  110.   }
  111.   fport = atoi(argv[4]);
  112.   if ( fport == 0) {
  113.     if ((Servent = getservbyname(argv[4], argv[5])) == (struct servent *)0) {
  114.       perror("getserverbyname");
  115.       exit(2);
  116.     }
  117.     fport = ntohs(Servent->s_port);
  118.   }
  119.   
  120.   lsin_addr = &laddr.sin_addr;
  121.   fsin_addr = &faddr.sin_addr;
  122.   if (k_getuid(fsin_addr, htons(fport), 
  123.            lsin_addr, htons(lport), &uid) != -1) {
  124.   pwp = getpwuid(uid);
  125.   printf("uid = %d (%s)\n",uid, pwp ? pwp->pw_name : "unknown user");
  126.   }
  127.     
  128.   exit(0);
  129. }
  130.